﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Newtonsoft.Json;

namespace Aurora.AI.Common.Models;

/// <summary>
/// chat completion 请求参数
/// </summary>
public class ChatCompletionRequest
{
    /// <summary>
    /// 模型
    /// </summary>
    [JsonProperty("model")]
    public string Model { get; set; }

    /// <summary>
    /// 离散度-温度
    /// </summary>
    [JsonProperty("temperature")]
    public double? Temperature { get; set; }

    /// <summary>
    /// 用温度采样的另一种方法称为核采样，其中模型考虑具有top_p概率质量的token的结果。因此0.1意味着只考虑包含前10%概率质量的标记。我们通常建议改变这个或“温度”，但不建议两者都改变。
    /// </summary>
    [JsonProperty("top_p")]
    public double? TopP { get; set; }
    /// <summary>
    /// 流式
    /// </summary>
    [JsonProperty("stream")]
    public bool Stream { get; set; } = true;
    /// <summary>
    /// 生成的答案允许的最大标记数。默认情况下，模型可以返回的token数量为(4096 -提示token)。
    /// </summary>
    [JsonProperty("max_tokens")]
    public double MaxTokens { get; set; } = 2048;
    /// <summary>
    /// 在-2.0到2.0之间的数字。正值会根据新标记在文本中存在的频率来惩罚它们，降低模型逐字重复同一行的可能性。[有关频率和存在惩罚的更多信息。](https://docs.api-reference/parameter-details)
    /// </summary>
    [JsonProperty("frequency_penalty")]
    public double? FrequencyPenalty { get; set; }
    /// <summary>
    /// 应用id
    /// </summary>
    public string ApplicationId { get; set; }
    /// <summary>
    /// 分享id
    /// </summary>
    public string SharedId { get; set; }

    /// <summary>
    /// dialog id 
    /// </summary>
    public string DialogId { get; set; }


    /// <summary>
    /// 消息id
    /// </summary>
    public string MessageId { get; set; }
}


public class ChatCompletionRequest<T> : ChatCompletionRequest
{
    [JsonProperty("messages")]
    public List<T> Messages { get; set; }
}